面试官:如何在千万级数据中查询 10W 的数据,都有什么方案?

您所在的位置:网站首页 es 性能 面试官:如何在千万级数据中查询 10W 的数据,都有什么方案?

面试官:如何在千万级数据中查询 10W 的数据,都有什么方案?

2023-03-14 05:48| 来源: 网络整理| 查看: 265

java-图灵-1 测试2 python-图灵-1

作者:变速风声 链接:https://juejin.cn/post/7104090532015505416

前言

在开发中遇到一个业务诉求,需要在千万量级的底池数据中筛选出不超过 10W 的数据,并根据配置的权重规则进行排序、打散(如同一个类目下的商品数据不能连续出现 3 次)。

下面对该业务诉求的实现,设计思路和方案优化进行介绍,对「千万量级数据中查询 10W 量级的数据」设计了如下方案

多线程 + CK 翻页方案 ES scroll scan 深翻页方案 ES + Hbase 组合方案 RediSearch + RedisJSON 组合方案 初版设计方案

整体方案设计为:

先根据配置的「筛选规则」,从底池表中筛选出「目标数据」 在根据配置的「排序规则」,对「目标数据」进行排序,得到「结果数据」

技术方案如下:

每天运行导数任务,把现有的千万量级的底池数据(Hive 表)导入到 Clickhouse 中,后续使用 CK 表进行数据筛选。 将业务配置的筛选规则和排序规则,构建为一个「筛选 + 排序」对象 SelectionQueryCondition。 从 CK 底池表取「目标数据」时,开启多线程,进行分页筛选,将获取到的「目标数据」存放到 result 列表中。 //分页大小 默认 5000 int pageSize = this.getPageSize(); //页码数 int pageCnt = totalNum / this.getPageSize() + 1; List result = Lists.newArrayList(); List futureList = new ArrayList(pageCnt); //开启多线程调用 for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3